// Have include guard.
#ifndef FPK_ARCADESTRAFEDRIVEFILTER_HPP
#define FPK_ARCADESTRAFEDRIVEFILTER_HPP

#include "../Filter.hpp"
#include "../../Values/TwoJoystickValue.hpp"
#include "../../Values/CartesianValue.hpp"

/**
 *  The ArcadeStrafeDriveFilter class is a filter that converts from a TwoJoystickValue to a CartesianValue using arcade strafe drive.
 *  
 *  This works just like arcade drive, but this adds another joystick to go sideways (or strafe) when using MecanumDriveSubsystem.
 */
class ArcadeStrafeDriveFilter :
	public Filter<TwoJoystickValue, CartesianValue>
{
	public:
		/**
		 *  Apply the filter to an input.
		 */
		virtual CartesianValue Apply(const TwoJoystickValue &input) const;
};

#endif // #ifndef FPK_ARCADESTRAFEDRIVEFILTER_HPP
